在本步骤中,您将创建提供高斯模糊效果的材质。
本教程的起点资料是存储在 <KanziWorkspace>/Tutorials/Blur/Start 目录中的 Blur.kzproj Kanzi Studio 工程文件。
<KanziWorkspace>/Tutorials/Blur/Completed 目录包含本教程已完成的 Kanzi Studio 工程。
在本节中,您将首先创建支持定向高斯模糊效果的材质类型,然后创建能用于应用该效果到 3D 内容的材质。
要创建提供模糊效果的材质:




precision mediump float;
uniform sampler2D Texture0;
uniform lowp float BlendIntensity;
uniform mediump vec2 kzTextureSize0;
//定义应用模糊的方向(x 或 y 轴)。
uniform lowp vec2 BlurDirection;
//确定模糊强度。
uniform mediump float BlurRadius;
//定义从顶点着色器传递的纹理坐标特性。
varying mediump vec2 vTexCoord;
vec4 gaussianBlur(mediump vec2 coord, lowp vec2 dir)
{
//定义含 9 个示例的一维高斯核。
float GAUSSIAN_KERNEL[9];
GAUSSIAN_KERNEL[0] = 0.028532;
GAUSSIAN_KERNEL[1] = 0.067234;
GAUSSIAN_KERNEL[2] = 0.124009;
GAUSSIAN_KERNEL[3] = 0.179044;
GAUSSIAN_KERNEL[4] = 0.20236;
GAUSSIAN_KERNEL[5] = 0.179044;
GAUSSIAN_KERNEL[6] = 0.124009;
GAUSSIAN_KERNEL[7] = 0.067234;
GAUSSIAN_KERNEL[8] = 0.028532;
vec2 texel = 1.0/kzTextureSize0;
vec4 sum = vec4(0.0);
//获取这个片段的原始纹理坐标。
vec2 tc = coord;
//获取模糊量。
float blur = BlurRadius;
//设置水平方向的模糊量。
float hstep = dir.x*texel.x;
//设置垂直方向的模糊量。
float vstep = dir.y*texel.y;
// 为每个片段采样 9 次纹理。
for(int i = 0; i < 9; i++)
{
float pixelOffset = (float(i) - floor(9.0 * 0.5));
mediump vec2 coord = vec2(tc.x + pixelOffset * blur * hstep, tc.y + pixelOffset * blur * vstep);
sum += texture2D(Texture0, coord) * GAUSSIAN_KERNEL[i];
}
return sum;
}
void main()
{
gl_FragColor = gaussianBlur(vTexCoord, BlurDirection) * BlendIntensity;
}




要详细了解关于材质和材质类型的信息,请参阅材质类型和材质。
要详细了解有关渲染器信息,请参阅着色器。